/**
 * 创建request请求
 * @returns
 */
const request = <>(
  url: string, //接口地址
  type: 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'CONNECT', //请求方式
  data: AnyObject, //请求的参数
  header: any //设置请求的 header
): Promise<T> => {
  // 拼接url  config.base后面会讲到
 var apiUrl = config.base + url
  // 这里是获取存在Store中的token，获取方式根据自身项目来
  const userStore = useUserStore()
  // 全局添加请求头
  let obj = {
    // 获取Store中的token || 获取本地存储的token
    'Authori-zation': (userStore.token || storage.getData("TOKEN") || ""),
  }
  if (header) {
    // 有无传入header，有则合并
    let headers = Object.assign(header, obj);
    header = headers;
  } else {
    header = obj
  }
  if (data) {
    // 清除无用参数
    Object.keys(data).forEach(key => {
      if (data[key] == null || data[key] == undefined || data[key] === '') {
        delete (data[key]);
      }
    })
  }

  return new Promise((resolve, reject) => {
    uni.request({
      url: apiUrl,
      method: type,
      data,
      header,
      success(res) {
        if (res.statusCode == 200) {
          const data: any = res.data;
          if (data.code == 0) {
            // 正常抛出数据
            resolve(data.data as T)
          } else {
            if(data.code == 401) {
              // 未登录
              uni.redirectTo({
                url: ""  //未登录跳转指定页面
              })
              uni.hideLoading();
              return reject(data);
            }
            // 错误数据
            uni.hideLoading();
            // 弹窗错误框，这里是自己封装组件，
            common.toastErr(data.message || "网络请求异常") 
            reject(data);
          }
        } else { 
          uni.hideLoading();
          common.toastErr("网络请求异常")
          reject(data)
        }
      },
      fail(err) {
        uni.hideLoading();
        common.toastErr("网络请求异常")
        reject(err)
      }
    })
  })
}